package com.basker.pisces.core;

import org.springframework.util.StringUtils;

import com.basker.pisces.core.meta.annotation.DataField;
import com.basker.pisces.core.meta.annotation.DataObjectMeta;
import com.basker.pisces.resource.StringResources;

/**
 * 元素基类，所有可描述的模型都可继承此类。
 *
 * <p>
 *
 * @author hangwen
 */
@DataObjectMeta
public abstract class Element {

    @DataField
    private String name;

    @DataField
    private String displayName;

    public Element() {

    }

    /**
     * 显示名称、标题，设置为${key}格式的时候，会默认从资源文件获取对应的值
     *
     * @return
     */
    public String getDisplayName() {
        return !StringUtils.isEmpty(displayName) ? StringResources.resolve(displayName) : name;
    }

    /**
     * 名称，元素的唯一标识
     *
     * @return
     */
    public String getName() {
        return name;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        String title = this.getDisplayName();
        title = !StringUtils.isEmpty(title) ? title : this.getName();

        return title;
    }
}
